import axios from 'axios'
import {Dialog } from 'vant';
import router from '../router'
// import { getToken } from '@/utils/auth'
import store from '@/store'
// create an axios instance
const service = axios.create({
  baseURL: process.env.BASE_API, // api的base_url
  timeout: 50000 // request timeout
})

// request interceptor
service.interceptors.request.use(config => {
  if (sessionStorage.getItem('token')) {
    //让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
    config.headers['token'] = sessionStorage.getItem('token')
  }
  store.commit('toggleLoading', true)
  return config
}, error => {
  // Do something with request error
  store.commit('toggleLoading', false)
  Promise.reject(error)
})

// respone interceptor
service.interceptors.response.use(response => {
  /**
   * 下面的注释为通过在response里，自定义code来标示请求状态
   * 当code返回如下情况则说明权限有问题，登出并返回到登录页
   * 如想通过xmlhttprequest来状态码标识 逻辑可写在下面error中
   * 以下代码均为样例，请结合自生需求加以修改，若不需要，则可删除
   */
  // alert(response.headers['connection'])
  const res = response.data
  let result = '';
  if (res.status !== 200) {
    if (res.status === 500 && res.message.indexOf('权限不足') > -1) {
      Dialog.alert({
        message: '权限不足',
        closeOnClickOverlay: true,
        showConfirmButton: false,
        showCancelButton: false
      }).then(() => {
        router.push('/');
      });
      // this.$dialog.confirm({
      //   title: '提示',
      //   message: '你已被登出，可以取消继续留在该页面，或者重新登录'
      // }).then(() => {
      //   store.dispatch('FedLogOut').then(() => {
      //     location.reload() // 为了重新实例化vue-router对象 避免bug
      //   })
      // })
    } else {
      if (res.status === 100) {
        Dialog.alert({
          message: '对不起，您尚未登录'
        }).then(() => {
          router.push({name: 'getValidate'});
        });
      } else if (res.status === 102) {
        Dialog.alert({
          message: '非法请求，请重新登录'
        }).then(() => {
          router.push({name: 'getValidate'});
        });
      } else if (res.status === 30004) {
        Dialog.alert({
          message: 'token已过期，请重新登录'
        }).then(() => {
          router.push({ name: 'getValidate' });
        });
      }
    }
    result = Promise.reject(res)
  } else {
    result = res
  }
  store.commit('toggleLoading', false)
  return result
}, error => {
  store.commit('toggleLoading', false)
// this.$toast.fail(error)
  return Promise.reject(error)
})

export default service
